package com.csust.zerocode.langgraph4j.node;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.csust.zerocode.langgraph4j.model.ImageResource;
import com.csust.zerocode.langgraph4j.state.WorkflowContext;
import lombok.extern.slf4j.Slf4j;
import org.bsc.langgraph4j.action.AsyncNodeAction;
import org.bsc.langgraph4j.prebuilt.MessagesState;

import java.util.List;

import static org.bsc.langgraph4j.action.AsyncNodeAction.node_async;

/**
 * 提示词增强节点
 */
@Slf4j
public class PromptEnhancerNode {
    public static AsyncNodeAction<MessagesState<String>> create() {
        return node_async(state -> {
            WorkflowContext context = WorkflowContext.getContext(state);
            log.info("执行节点: 提示词增强");
            //得到初始的提示词
            String originalPrompt = context.getOriginalPrompt();
            List<ImageResource> imageList = context.getImageList();
            String imageListStr = context.getImageListStr();
            //构建增强后的提示词
            StringBuilder  enhancedPromptBuilder = new StringBuilder();
            enhancedPromptBuilder.append(originalPrompt);
            if(CollUtil.isNotEmpty(imageList) || StrUtil.isNotBlank(imageListStr)){
                //如果图片不为空，则添加图片信息
                enhancedPromptBuilder.append("\n\n##可用素材资源\n");
                enhancedPromptBuilder.append("在生成网站使用以下图片资源，将这些图片合理地嵌入到网站的相应位置中。\n");
                if(CollUtil.isNotEmpty(imageList)){
                    //如果是图片列表
                    for (ImageResource imageResource : imageList) {
                        enhancedPromptBuilder.append("- ").append(imageResource.getCategory().getText())
                                .append(": ")
                                .append(imageResource.getDescription())
                                .append("(")
                                .append(imageResource.getUrl())
                                .append(")\n");
                    }
                }else{
                    enhancedPromptBuilder.append("- ").append(imageListStr);
                }
            }
            // TODO: 实际执行提示词增强逻辑
            
            // 简单的假数据
            String enhancedPrompt = enhancedPromptBuilder.toString();
            // 更新状态
            context.setCurrentStep("提示词增强");
            context.setEnhancedPrompt(enhancedPrompt);
            log.info("提示词增强完成，增强后的字符长度：{}", enhancedPrompt.length());
            return WorkflowContext.saveContext(context);
        });
    }
}
